/****************************************
*   双向链表
*   Created by zephyrus on 2024/6/23.
*****************************************/

#ifndef DATA_STRUCTURE_DLINKEDLIST_H
#define DATA_STRUCTURE_DLINKEDLIST_H
#include "option_config.h"

/**
 * Initzation
 */
void InitDList(DList *list);

/**
 * 尾插入法
 * @param list
 * @param x
 */
void DLinkedList_push_back(DList *list,ElemType x);

/**
 * 头插入法
 * @param list
 * @param x
 */
void DLinkedList_push_front(DList *list,ElemType x);

/**
 * 尾删除
 * @param list
 */
void DLinkedList_pop_back(DList *list);

/**
 * 头删除
 * @param list
 */
void DLinkedList_pop_front(DList *list);

/**
 * 按值插入
 * @param list
 * @param x
 */
void DLinkedList_insert_val(DList *list,ElemType x);

/**
 * 查找
 * @param list
 * @param x
 */
DNode* DLinkedList_find(DList *list,ElemType x);

/**
 * 求有效结点
 * @param list
 * @return
 */
int DLinkedList_length(DList *list);

/**
 * 删除特定值的结点
 * @param list
 * @param x
 */
void DLinkedList_deleted_val(DList *list,ElemType x);

/**
 * 排序（升序)
 * @param list
 */
void DLinkedList_sort(DList *list);

/**
 * 链表倒置
 * @param list
 */
void DLinkedList_resver(DList *list);

/**
 * 清除所有的有效结点
 * @param list
 */
void DLinkedList_clear(DList *list);

/**
 * 销毁双链表
 * @param list
 */
void DLinkedList_destory(DList *list);
/**
 * 显示数据
 * @param list
 */
void DLinkedList_show_list(DList *list);



#endif //DATA_STRUCTURE_DLINKEDLIST_H
